package com.单例模式;

public class InnerSingleton {


    /**
     * 私有化构造器
     */
    private InnerSingleton(){

    }

    /**
     * 暴露的公共方法
     */
    public static InnerSingleton getInstance(){
        /**
         * 使用外部类去调用静态内部类
         * 当外部类被classLoader加载的时候，静态内部类是不会被加载的，当外部类调用静态内部类中的属性或者方法的时候会导致静态内部类的加载。
         * 我们知道类在加载的过程中是线程安全的，所以静态内部类可以保证单例的线程安全
         */
        return StaticInnerClass.INSTANCE;
    }

    /**
     * 私有的静态内部类
     */
    private static class StaticInnerClass{
        private static final InnerSingleton INSTANCE=new InnerSingleton();
    }

}
